package entity

import (
	"errors"
	"fmt"

	"shqsoft.cn/pasnj/base"

	"github.com/jinzhu/gorm"
)

//CompZSBL 中收补录导入
type CompZSBL struct {
	ID int `gorm:"AUTO_INCREMENT;primary_key;column:ID"`
	// DTID  time.Time `gorm:"column:DTID"` //导入日期
	JZYF  string  `gorm:"column:JZYF"`
	FL    string  `gorm:"column:FL"`    //分类
	KHMC  string  `gorm:"column:KHMC"`  //客户名称
	JYRQ  string  `gorm:"column:JYRQ"`  //交易日期
	ZSKMH string  `gorm:"column:ZSKMH"` //中收科目号
	FYNM  string  `gorm:"column:FYNM"`  //费用名称
	ZSJE  float64 `gorm:"column:ZSJE"`  //中收金额(元)
	JJDW  string  `gorm:"column:JJDW"`

	EMNO1 string  `gorm:"column:EMNO1"`
	EMID1 int     `gorm:"column:EMID1"`
	EMNM1 string  `gorm:"-" json:"emnm1"`
	DSVL1 float64 `gorm:"column:DSVL1"`
	JE1   float64 `gorm:"column:JE1"` //金额1
	EMNO2 string  `gorm:"column:EMNO2"`
	EMNM2 string  `gorm:"-" json:"emnm2"`
	EMID2 int     `gorm:"column:EMID2"`
	DSVL2 float64 `gorm:"column:DSVL2"`
	JE2   float64 `gorm:"column:JE2"` //金额2
	EMNO3 string  `gorm:"column:EMNO3"`
	EMNM3 string  `gorm:"-" json:"emnm3"`
	EMID3 int     `gorm:"column:EMID3"`
	DSVL3 float64 `gorm:"column:DSVL3"`
	JE3   float64 `gorm:"column:JE3"` //金额3
	EMNO4 string  `gorm:"column:EMNO4"`
	EMNM4 string  `gorm:"-" json:"emnm4"`
	EMID4 int     `gorm:"column:EMID4"`
	DSVL4 float64 `gorm:"column:DSVL4"`
	JE4   float64 `gorm:"column:JE4"` //金额4
	EMNO5 string  `gorm:"column:EMNO5"`
	EMNM5 string  `gorm:"-" json:"emnm5"`
	EMID5 int     `gorm:"column:EMID5"`
	DSVL5 float64 `gorm:"column:DSVL5"`
	JE5   float64 `gorm:"column:JE5"` //金额5
	EMNO6 string  `gorm:"column:EMNO6"`
	EMNM6 string  `gorm:"-" json:"emnm6"`
	EMID6 int     `gorm:"column:EMID6"`
	DSVL6 float64 `gorm:"column:DSVL6"`
	JE6   float64 `gorm:"column:JE6"` //金额6
	// CWXX  string  `gorm:"column:CWXX"`  //处理结果
}

//TableName 中收补录导入
func (CompZSBL) TableName() string {
	return "T_COMP_ZJYW_SJBL"

}

//CompZSBLEF 返回结构体
func CompZSBLEF() base.EntityFunc {
	return func() interface{} {
		entity := CompZSBL{}
		return &entity
	}
}

//CompZSBLESF 返回结构体数组
func CompZSBLESF() base.EntitiesFunc {
	return func() interface{} {
		var entities []CompZSBL
		return &entities
	}
}

//BeforeSave 保存前的触发器
func (i *CompZSBL) BeforeSave(tx *gorm.DB) (err error) {
	sqlEx := "select dbo.GetBackDATE()"
	row := tx.Raw(sqlEx).Row()
	// var dsdt time.Time
	// row.Scan(&dsdt)
	// if i.DTID.Unix() < dsdt.Unix() {
	// 	return fmt.Errorf("导入日期不能小于%s！", dsdt.Format("20060102"))
	// }

	sum := i.JE1 + i.JE2 + i.JE3 + i.JE4 + i.JE5 + i.JE6
	zsje := i.ZSJE
	if sum != zsje {
		return errors.New("金额之和必须为中收金额！")

	}

	var emid1, emid2, emid3, emid4, emid5, emid6 int
	sqlEx = "select ID from T_SysUser where SysUserID=?"
	row = tx.Raw(sqlEx, i.EMNO1).Row()
	row.Scan(&emid1)
	if emid1 == 0 {
		return fmt.Errorf("员工号1:%s在系统中没有找到！", i.EMNO1)
	}
	i.EMID1 = emid1
	if i.DSVL2 > 0 {
		row = tx.Raw(sqlEx, i.EMNO2).Row()
		row.Scan(&emid2)
		if emid2 == 0 {
			return fmt.Errorf("员工号2:%s在系统中没有找到！", i.EMNO2)
		}
		i.EMID2 = emid2
	}
	if i.DSVL3 > 0 {
		row = tx.Raw(sqlEx, i.EMNO3).Row()
		row.Scan(&emid3)
		if emid3 == 0 {
			return fmt.Errorf("员工号3:%s在系统中没有找到！", i.EMNO2)
		}
		i.EMID3 = emid3
	}
	if i.DSVL4 > 0 {
		row = tx.Raw(sqlEx, i.EMNO4).Row()
		row.Scan(&emid4)
		if emid4 == 0 {
			return fmt.Errorf("员工号4:%s在系统中没有找到！", i.EMNO4)
		}
		i.EMID4 = emid4
	}
	if i.DSVL5 > 0 {
		row = tx.Raw(sqlEx, i.EMNO5).Row()
		row.Scan(&emid5)
		if emid5 == 0 {
			return fmt.Errorf("员工号5:%s在系统中没有找到！", i.EMNO5)
		}
		i.EMID5 = emid5
	}
	if i.DSVL6 > 0 {
		row = tx.Raw(sqlEx, i.EMNO6).Row()
		row.Scan(&emid6)
		if emid6 == 0 {
			return fmt.Errorf("员工号6:%s在系统中没有找到！", i.EMNO6)
		}
		i.EMID6 = emid6
	}

	return
}
func init() {
	base.DaoPoolObj.Put("CompZSBL", base.NewDefaultDao(CompZSBLEF(), CompZSBLESF(), nil))

}
